package com.li.spring;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.*;

/**
 * Bean的生命周期按照粗略的五步的话
 * 第一步：实例化Bean（调用无参数构造方法）
 * 第二步：给Bean属性赋值（调用set方法）
 * 第三步：初始化Bean（调用init方法，注意：这个init方法需要自己写，自己配）
 * 第四步：使用Bean
 * 第五步：销毁Bean（调用bean的destroy方法，这个destroy方法需要自己写，自己配）
 */
public class User implements BeanNameAware, BeanClassLoaderAware, BeanFactoryAware, InitializingBean, DisposableBean {

    private String name;


    public User() {
        System.out.println("第一步：无参数构造方法执行");
    }

    public void setName(String name) {
        System.out.println("第二步：给对象的属性赋值");
        this.name = name;
    }

    //这个方法需要自己写，自己配，方法名随意
    public void initBean() {
        System.out.println("第四步：初始化Bean");
    }

    //这个方法需要自己写，自己配，方法名随意
    public void destroyBean() {
        System.out.println("第七步：销毁Bean");
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                '}';
    }

    @Override
    public void setBeanClassLoader(ClassLoader classLoader) {
        System.out.println("BeanClassLoader：" + classLoader);
    }

    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        System.out.println("BeanFactory：" + beanFactory);
    }

    @Override
    public void setBeanName(String name) {
        System.out.println("BeanName：" + name);

    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("InitializingBean的afterPropertiesSet执行");
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("DisposableBean的destroy方法执行");
    }
}
